﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WpfApp4.Library
{
    public class Coroutine
    {
        private IEnumerator _routine;

        public Coroutine(IEnumerator ie)
        {
            _routine = ie;
        }

        public bool MoveNext()
        {
            if(_routine == null)
            {
                return false;
            }

            IWait wait = _routine.Current as IWait;
            bool moveNext = true;

            if(wait != null)
            {
                // 倒计时
                moveNext = wait.Tick();
            }

            if (!moveNext)
            {
                // 当时间没有到时，返回true
                // 告诉携程管理器 后边还有对象需要下一次继续迭代
                //Console.WriteLine("[Coroutine] not move next");
                return true;
            }
            else
            {
                // 此时所有等待时间或者帧都已经迭代完毕，看IEnumerator对象后续是否还有yield return 对象
                // 将此结果通知给管理器，管理器会在下一次迭代时决定是否继续迭代该Coroutine对象
                //Console.WriteLine("[Coroutine] move next");
                return _routine.MoveNext();
            }
        }

        public void Stop()
        {
            //Console.WriteLine("停止");
            _routine = null;
        }
    }
}
